package com.cy;

import com.cy.pj.sys.service.realm.ShiroRealm;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;
import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;


@SpringBootApplication
public class DbpmsApplication {
    public static void main(String[] args) {
        SpringApplication.run(DbpmsApplication.class,args);
    }

    /**
     * 定义Realm对象，通过此对象访问数据库中的用户和权限信息，并进行封装。
     * @Bean注解描述方法时，表示方法的返回要交给spring管理，这个bean的名字默认
     * 为方法名。,还可以自己起名，例如@Bean("shiroRealm")*/
    @Bean
    public Realm realm() {
        return new ShiroRealm();
    }
    /**基于此对象定义过滤规则，例如哪些请求必须要认证，哪些请求不需要认证
     * ShiroFilterChainDefinition 此对象中定义了若干过滤器Filter,基于这
     * 些过滤器以及我们定义的过滤规则对业务进行实现。
     */

    @Bean
    public ShiroFilterChainDefinition shiroFilterChainDefinition() {
        //定义过滤链对象
        DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();

        //设置登陆页面不需要认证(其中anon表示匿名访问处理)
        chainDefinition.addPathDefinition("/user/login/**","anon");
        //设置登出操作，登出后跳转到登陆页面(其中,logout表示登出处理)
        chainDefinition.addPathDefinition("/user/logout","logout");
        //设置哪些资源需要认证才可以访问
        //这里表示对这个url，要调用过滤链中的那个过滤器(例如authc)进行处理
        //chainDefinition.addPathDefinition("/user/**", "authc");
        chainDefinition.addPathDefinition("/**", "authc");
        return chainDefinition;
    }
}
